/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controlador;

import Modelo.Factura;
import Modelo.FacturaModelo;
import Modelo.ListadoFactura;
import Modelo.Reporte;
import java.sql.SQLException;
import java.sql.Date;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author SAW
 */
public class ControlFactura {
    FacturaModelo mod= new FacturaModelo();
    LinkedList lista;
    DefaultTableModel tablaModelo;
/**
   * Obtiene el ultimo consecutivo o maximo consecutivo
   */
  public int getConsecutivo() throws SQLException{
        return mod.getConsecutivo();
  }


    /**
   * Registrar la factura
   */
  public void registraFactura(String consecutivo,Date fecha,String observaciones,String pedidoConsecutivo,boolean estado,double subtotal,double iva,double total) throws SQLException{
      Factura ped=new Factura(consecutivo, fecha, observaciones, pedidoConsecutivo, estado,subtotal,iva,total);
      mod.setNuevoFactura(ped);
  }


    /**metodo para enviar una tabla y reciva una tabla
     * utilizo 2 parametros la tabla y la consulta, si la consulta es vacia
     * trae todos los datos
     * @param tabla
     * @param consulta
     * @param tipo
     * @return
     */
    public JTable cargaFacturaTabla(Date fechaInicial,Date fechaFinal,JTable tabla,String consulta,int tipo){
        cleanTabla(tabla);
        tablaModelo=(DefaultTableModel) tabla.getModel();
        ListadoFactura lis=new ListadoFactura();
	try
	{
            lista=mod.consultaFacturaTabla(fechaInicial,fechaFinal,consulta, tipo);
            Iterator it=lista.iterator();
            while( it.hasNext() )
            {
                lis=(ListadoFactura)it.next();
                tablaModelo.addRow
                (
                    new Object[]
                    {
                       lis.getFecha(),lis.getConsecutivo(),lis.getNombre(),lis.getEstablecimiento(),lis.getDireccion(),lis.getSubtotal(),lis.getIva(),lis.getTotal()
                    }
                );
            }
            tablaModelo.addRow(new Object[]{});
     //       JOptionPane.showMessageDialog(null,"probando");
	}catch(Exception er){
		JOptionPane.showMessageDialog(null, "Error al cargar la lista de Cliente de la base de datos, se presento " +
                        "\n un inconveniente al tratar de Buscar la informacion requerida " +
                        "\n por el sistema." +
                        "\n."+er.toString() , "Error en la Carga de Informacion...",JOptionPane.DEFAULT_OPTION);
	}
        return tabla;
    }
    
     /**
   * limpia la tabla
   * @param tabla
   * @return
   */
  public JTable cleanTabla(JTable tabla){
        tablaModelo=(DefaultTableModel) tabla.getModel();
        int x=tablaModelo.getRowCount();
	for(int i=-1;i<(x-1);i++)
		tablaModelo.removeRow(0);
        return tabla;
  }

   /**
 * consulta existencia Factura
 * @param consecutivo
 * @return boolean
 * @throws SQLException
 */
 public boolean isExist(String consulta) throws SQLException{
      Factura fac=new Factura();
      fac=mod.consultaFactura(consulta);

      if(fac.getConsecutivo()!=null)
          return true;

      return false;
  }
  
    /**
 * consulta Factura
 * @param consecutivo
 * @return Factura
 * @throws SQLException
 */
  public Factura getFactura(String consulta) throws SQLException{
        return mod.consultaFactura(consulta);
  }

  /**
   * Genera reportes consecutivos
   */
  public String listadoReporte(String facInicial,String facFinal) throws SQLException{
      int iniFact=Integer.parseInt(facInicial);
      int finFact=Integer.parseInt(facFinal);
      if(iniFact>finFact)
          return "Verfique su Consulta";

      while(isExist(iniFact+"") && iniFact<=finFact){
          /**********************************************************************************/
           Reporte report=new Reporte();
           report.startReport("ReporteFacturaDeVenta.jasper",iniFact+"");
          /**********************************************************************************/
           iniFact++;
      }
      return "Operacion Exitosa";
  }

  /**
   * Genera reportes consolidados
   */
  public String reporteConsolidados(String codigo,String facInicial,String facFinal) throws SQLException{
      /**********************************************************************************/
         Reporte report=new Reporte();
         report.startReport("ReportConsolidado.jasper",codigo,facInicial,facFinal);
      /**********************************************************************************/

      return "Operacion Exitosa";
  }


  public JTable consolidar(Date fechaInicial,Date fechaFinal,JTable tabla,String vendedor) throws SQLException{
      lista=new LinkedList();
      int x=0;
        cleanTabla(tabla);
        tablaModelo=(DefaultTableModel) tabla.getModel();
	try
	{
            lista=mod.consolidar(fechaInicial,fechaFinal,vendedor);
            Iterator it=lista.iterator();
            while( it.hasNext() )
            {
                it.next();

                Object vector[]=new Object[]{lista.get(x)};
                Object vector2[]=new Object[5];
                vector2=(Object[])vector[0];

                tablaModelo.addRow
                (
                    new Object[]
                    {
                      vector2[0]+"",//codigo
                      vector2[1],//Descripcion
                      Double.parseDouble(vector2[2]+"")//cantidad
                   }
                );
                x++;
             }
      //      tabla=matrizDetalles(tabla);//le doy los demas valores de los campos siguientes
	}catch(Exception er){
		JOptionPane.showMessageDialog(null, "Error al cargar la lista de Cliente de la base de datos, se presento " +
                        "\n un inconveniente al tratar de Buscar la informacion requerida " +
                        "\n por el sistema." +
                        "\n."+er.toString() , "Error en la Carga de Informacion...",JOptionPane.DEFAULT_OPTION);
	}

        tablaModelo.addRow(new Object[]{});

        return tabla;
  }


  /**
   * total de productos consolidados
   * @param fechaInicial
   * @param fechaFinal
   * @param vendedor
   * @return int
   * @throws SQLException
   */
  public int totalProductosConsolidados(Date fechaInicial,Date fechaFinal, String vendedor) throws SQLException{
      return mod.totalProductosConsolidados(fechaInicial,fechaFinal,vendedor);
  }

// public void
}
